using System;

namespace LiJ.Common.Core
{
	/// <summary>
	///
	/// </summary>
	public static class ResultMoMap
	{
		/// <summary>
		///   将结果实体转换成其他结果实体
		/// </summary>
		/// <typeparam name="TResult">输出对象</typeparam>
		/// <typeparam name="TPara"></typeparam>
		/// <returns>输出对象</returns>
		public static ResultMo<TResult> ConvertToResult<TPara, TResult>(this ResultMo<TPara> source, Func<TPara, TResult> func = null)
		{
			ResultMo<TResult> resultMo = new ResultMo<TResult>
			{
				Ret = source.Ret,
				Msg = source.Msg
			};
			if (func != null && source.Data != null)
			{
				resultMo.Data = func(source.Data);
			}
			return resultMo;
		}

		/// <summary>
		///   将结果实体转换成其他结果实体   --转化结果是通过 泛型 定义的Result实体
		///     仅转化 Ret和 Message 的值  
		/// </summary>
		/// <typeparam name="TResult">输出对象</typeparam>
		/// <returns>输出对象</returns>
		public static ResultMo<TResult> ConvertToResultOnly<TResult>(this ResultMo source)
		{
			return new ResultMo<TResult>
			{
				Ret = source.Ret,
				Msg = source.Msg
			};
		}

		/// <summary>
		///  将结果实体转换成其他结果实体   --转化结果是通过 继承 定义的Result实体  
		///    仅转化 Ret和 Message 的值
		/// </summary>
		/// <typeparam name="TResult">输出对象</typeparam>
		/// <returns>输出对象</returns>
		public static TResult ConvertToResult<TResult>(this ResultMo source) where TResult : ResultMo, new()
		{
		    TResult val = new TResult
		    {
		        Ret = source.Ret,
		        Msg = source.Msg
		    };
		    return val;
		}
	}
}
